home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / misc / JarIndex.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  4.1 KB  |  183 lines

  1. package sun.misc;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.OutputStream;
  10. import java.io.OutputStreamWriter;
  11. import java.util.Enumeration;
  12. import java.util.HashMap;
  13. import java.util.Iterator;
  14. import java.util.LinkedList;
  15. import java.util.Map;
  16. import java.util.Vector;
  17. import java.util.jar.JarEntry;
  18. import java.util.jar.JarFile;
  19. import java.util.zip.ZipEntry;
  20. import java.util.zip.ZipFile;
  21.  
  22. public class JarIndex {
  23.    private HashMap indexMap;
  24.    private HashMap jarMap;
  25.    private String[] jarFiles;
  26.    public static final String INDEX_NAME = "META-INF/INDEX.LIST";
  27.  
  28.    public JarIndex() {
  29.       this.indexMap = new HashMap();
  30.       this.jarMap = new HashMap();
  31.    }
  32.  
  33.    public JarIndex(InputStream var1) throws IOException {
  34.       this();
  35.       this.read(var1);
  36.    }
  37.  
  38.    public JarIndex(String[] var1) throws IOException {
  39.       this();
  40.       this.jarFiles = var1;
  41.       this.parseJars(var1);
  42.    }
  43.  
  44.    public static JarIndex getJarIndex(JarFile var0, MetaIndex var1) throws IOException {
  45.       JarIndex var2 = null;
  46.       if (var1 != null && !var1.mayContain("META-INF/INDEX.LIST")) {
  47.          return null;
  48.       } else {
  49.          JarEntry var3 = var0.getJarEntry("META-INF/INDEX.LIST");
  50.          if (var3 != null) {
  51.             var2 = new JarIndex(var0.getInputStream(var3));
  52.          }
  53.  
  54.          return var2;
  55.       }
  56.    }
  57.  
  58.    public String[] getJarFiles() {
  59.       return this.jarFiles;
  60.    }
  61.  
  62.    private void addToList(String var1, String var2, HashMap var3) {
  63.       LinkedList var4 = (LinkedList)var3.get(var1);
  64.       if (var4 == null) {
  65.          var4 = new LinkedList();
  66.          var4.add(var2);
  67.          var3.put(var1, var4);
  68.       } else if (!var4.contains(var2)) {
  69.          var4.add(var2);
  70.       }
  71.  
  72.    }
  73.  
  74.    public LinkedList get(String var1) {
  75.       Object var2 = null;
  76.       int var3;
  77.       LinkedList var4;
  78.       if ((var4 = (LinkedList)this.indexMap.get(var1)) == null && (var3 = var1.lastIndexOf("/")) != -1) {
  79.          var4 = (LinkedList)this.indexMap.get(var1.substring(0, var3));
  80.       }
  81.  
  82.       return var4;
  83.    }
  84.  
  85.    public void add(String var1, String var2) {
  86.       String var3;
  87.       int var4;
  88.       if ((var4 = var1.lastIndexOf("/")) != -1) {
  89.          var3 = var1.substring(0, var4);
  90.       } else {
  91.          var3 = var1;
  92.       }
  93.  
  94.       this.addToList(var3, var2, this.indexMap);
  95.       this.addToList(var2, var3, this.jarMap);
  96.    }
  97.  
  98.    private void parseJars(String[] var1) throws IOException {
  99.       if (var1 != null) {
  100.          Object var2 = null;
  101.  
  102.          for(int var3 = 0; var3 < var1.length; ++var3) {
  103.             String var7 = var1[var3];
  104.             ZipFile var4 = new ZipFile(var7.replace('/', File.separatorChar));
  105.             Enumeration var5 = var4.entries();
  106.  
  107.             while(var5.hasMoreElements()) {
  108.                String var6 = ((ZipEntry)((ZipEntry)var5.nextElement())).getName();
  109.                if (!var6.startsWith("META-INF/") || !var6.equals("META-INF/") && !var6.equals("META-INF/INDEX.LIST") && !var6.equals("META-INF/MANIFEST.MF")) {
  110.                   this.add(var6, var7);
  111.                }
  112.             }
  113.  
  114.             var4.close();
  115.          }
  116.  
  117.       }
  118.    }
  119.  
  120.    public void write(OutputStream var1) throws IOException {
  121.       BufferedWriter var2 = new BufferedWriter(new OutputStreamWriter(var1, "UTF8"));
  122.       var2.write("JarIndex-Version: 1.0\n\n");
  123.       if (this.jarFiles != null) {
  124.          for(int var3 = 0; var3 < this.jarFiles.length; ++var3) {
  125.             String var4 = this.jarFiles[var3];
  126.             var2.write(var4 + "\n");
  127.             LinkedList var5 = (LinkedList)this.jarMap.get(var4);
  128.             if (var5 != null) {
  129.                Iterator var6 = var5.iterator();
  130.  
  131.                while(var6.hasNext()) {
  132.                   var2.write((String)((String)var6.next()) + "\n");
  133.                }
  134.             }
  135.  
  136.             var2.write("\n");
  137.          }
  138.  
  139.          var2.flush();
  140.       }
  141.  
  142.    }
  143.  
  144.    public void read(InputStream var1) throws IOException {
  145.       BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "UTF8"));
  146.       Object var3 = null;
  147.       String var4 = null;
  148.       Vector var5 = new Vector();
  149.  
  150.       while((var7 = var2.readLine()) != null && !var7.endsWith(".jar")) {
  151.       }
  152.  
  153.       for(; var7 != null; var7 = var2.readLine()) {
  154.          if (var7.length() != 0) {
  155.             if (var7.endsWith(".jar")) {
  156.                var4 = var7;
  157.                var5.add(var7);
  158.             } else {
  159.                this.addToList(var7, var4, this.indexMap);
  160.                this.addToList(var4, var7, this.jarMap);
  161.             }
  162.          }
  163.       }
  164.  
  165.       this.jarFiles = (String[])var5.toArray(new String[var5.size()]);
  166.    }
  167.  
  168.    public void merge(JarIndex var1, String var2) {
  169.       for(Map.Entry var4 : this.indexMap.entrySet()) {
  170.          String var5 = (String)var4.getKey();
  171.  
  172.          for(String var8 : (LinkedList)var4.getValue()) {
  173.             if (var2 != null) {
  174.                var8 = var2.concat(var8);
  175.             }
  176.  
  177.             var1.add(var5, var8);
  178.          }
  179.       }
  180.  
  181.    }
  182. }
  183.